package org.example.richtersubstitution;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @author
 * @description 里氏替换原则
 */
@SpringBootTest
public class RichterSubstitution2 {

    @Test
    void runTest()
    {
        A1 a1 = new A1();
        System.out.println("11-3="+ a1.func1(11, 3));
        System.out.println("1-8=" + a1.func1(1, 8));
        System.out.println("---------------------------------------");
        B1 b1 = new B1();
        System.out.println("11+3="+ b1.func1(11, 3));
        System.out.println("1+8=" + b1.func1(1, 8));
        System.out.println("11+3+9="+ b1.func2(11, 3));

        //使用组合仍然可以实现A的项目相关功能
        System.out.println("11-3="+ b1.func3(11, 3));//这里本意是11-3

    }

}

//创建一个更加基础的基类
class  Base {
    //把更加基础的方法和成员写到base类中
}

class  A1 extends Base  {
    //差
    public int func1(int num1, int num2)
    {
        return num1 - num2;
    }
}

class B1 extends Base {

    //还想用到A1类方法 使用组合方法
    private A1 a1=new A1();

    public int func1(int a, int b)
    {
        return a + b;
    }

    public int func2(int a, int b)
    {
        return func1(a, b)+9;
    }

    //使用组合仍然可以实现A的项目相关功能
    public int func3(int num1, int num2){
        return this.a1.func1(num1,num2);
    }

}